package my_web.bean;
import java.util.Hashtable;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;
/**
 * 通过 implements该HttpSessionBindingListener,该类实现了与session的绑定,具体的说：
 * 	1.Session代表客户的会话过程：
 * 	2.客户登录时，往Session中传入一个对象，即可跟踪客户的会话；
 * 	3.在Servlet中，传入Session的对象如果是一个实现HttpSessionBindingListener接口的对象（方便起见，此对象称为监听器），
 *    则在传入的时候（即调用HttpSession对象的setAttribute方法的时候）
 *    和移去的时候（即调用HttpSession对象的removeAttribute方法的时候或Session Time out的时候）
 *    Session对象会自动调用监听器的valueBound和valueUnbound方法
 */
public class Emp implements HttpSessionBindingListener{
/**
 * 补充说明：
 * HttpSessionBindingListener和HttpSessionListener之间的最大区别：
 * HttpSessionListener只需要设置到web.xml中就可以监听整个应用中的所有session
 * HttpSessionBindingListener必须实例化后放入某一个session中，才可以进行监听
 * 从监听范围上比较，HttpSessionListener设置一次就可以监听所有session，HttpSessionBindingListener通常都是一对一的
 */
	public static Hashtable<String, HttpSession> map = new Hashtable<>();
	private String e_id;
	private String e_name;
	private String e_state;
	private String d_id;
	private String p_id;
	private String password;
	private String d_name;
	private String p_name;
	private String image;
	public Emp() {
		super();
	}
	public String getE_id() {
		return e_id;
	}
	public void setE_id(String e_id) {
		this.e_id = e_id;
	}
	public String getE_name() {
		return e_name;
	}
	public void setE_name(String e_name) {
		this.e_name = e_name;
	}
	public String getE_state() {
		return e_state;
	}
	public void setE_state(String e_state) {
		this.e_state = e_state;
	}
	public String getD_id() {
		return d_id;
	}
	public void setD_id(String d_id) {
		this.d_id = d_id;
	}
	public String getP_id() {
		return p_id;
	}
	public void setP_id(String p_id) {
		this.p_id = p_id;
	}
	public String getD_name() {
		return d_name;
	}
	public void setD_name(String d_name) {
		this.d_name = d_name;
	}
	public String getP_name() {
		return p_name;
	}
	public void setP_name(String p_name) {
		this.p_name = p_name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	public String getImage() {
		return image;
	}
	public void setImage(String image) {
		this.image = image;
	}
	public String toString() {
		return "Emp [e_id=" + e_id + ", e_name=" + e_name + ", e_state=" + e_state + ","
				+ " d_id=" + d_id + ", p_id=" + p_id+ "]";
	}
	/**
	 * 调用时间：该方法在执行HttpSession对象的setAttribute方法的时候被调用
	 * 作用：数据绑定
	 * 具体的，将当前用户的id作为map的key值,和session一起作为键值对 存入map集合中
	 */
	@Override
	public void valueBound(HttpSessionBindingEvent event) {
		Emp.map.put(this.e_id,event.getSession());		
	}
	/**
	 * 调用时间：该方法在调用HttpSession对象的removeAttribute方法的时候
	 * 或Session Time out的时候被调用
	 * 作用：数据移除
	 * 具体的，将当前用户的id作为map的key值,和session一起对应的键值对 从map集合中移除
	 */
	@Override
	public void valueUnbound(HttpSessionBindingEvent event) {
		Emp.map.remove(e_id);	
	}
}
